#ifndef THREADTRACKER_H_
#define THREADTRACKER_H_

#include "Thread.h"
#include "TorrentInfo.h"
#include "ConexionTracker.h"
#include "ProtocoloTracker.h"
#include "UrlEncoding.h"
#include "RespuestaTracker.h"
#include "ConexionPeerCliente.h"
#include "Mutex.h"
#include <string.h>
#include <vector>
#include <queue>
#include "Condition.h"

using namespace std;

class ThreadTracker: public Thread {

private:
	ConexionTracker conexion;
	ProtocoloTracker protocolo;
    RespuestaTracker* respuesta;

	TorrentInfo* infoTorrent;
	string peerId;
	unsigned int intervaloDeComunicacion;
	unsigned long int puerto;

    string trackerId;
	string cantSubida;
    string cantBajada;
    string cantQueFalta;
    string event;

    Mutex mutexCantSubida;
    Mutex mutexCantBajada;
    Mutex mutexCantQueFalta;

    queue<Peer>* peers;
    Condition* condicionPeers;

    bool compact;

	UrlEncoding urlEncoder;

	string getCantSubida();
    string getCantBajada();
    string getCantQueFalta();

public:
	ThreadTracker(TorrentInfo* informacionTorrent, const string &peerId, queue<Peer>* peers, Condition* condicionPeers, const unsigned long int puerto,unsigned int tiempoDeEspera = 60);
	virtual ~ThreadTracker();
	virtual void* run();
	virtual void stop();

	void setCantSubida(const string &cantSubida);
	void setCantBajada(const string &cantBajada);
	void setCantQueFalta(const string &cantQueFalta);

};

#endif /* THREADTRACKER_H_ */
